define(['config', 'util/utils'], function (config, util) {
    const socket = io(config.socket.origin);

    socket.on('connect',  () => {
        console.log('client connect server');
    }).on('disconnect', () => {
        console.log('client disconnect');
    });

    return {
        emit(name, data) {
            try {
                let _data;
                if(util.isAnyType(data,'object', 'array')) {
                    _data = JSON.stringify(data);
                } else {
                    _data = data;
                }
                // console.log('---socket: {', `name: => ${name}, data: => ${_data}}`);

                return socket.emit(name, _data);
            } catch (e) {
                console.error(e)
            }
        },

        on(name, cb) {
            // console.log('---socket: {', `name: => ${name}}`);
            return socket.on(name, (data) => {
                try {
                    let _data;
                    if(util.isAnyType(data,'object', 'array')) {
                        _data = JSON.parse(data);
                    } else {
                        _data = data;
                    }
                    cb(_data);
                    // console.log('---socket: {', `name: => ${name}, data: => ${_data}}`);
                    return socket
                } catch (e) {
                    console.error(e)
                }
            });
        }
    }
});
